The advent of computers and their continued technological advancement has revolutionized the manner in which people work and live. One factor that has driven this revolution, by increasing people's willingness and desire to use computers, is an improvement in the ease of use or “user-friendliness” of computers.
Although computers have become more user-friendly over the years, situations still arise where their user-friendliness can be improved. For example, situations still exist where the user can input “free form” data into a computer without being informed as to what are valid input options for the data, such as by typing a command to the computer into an edit control of a graphical user interface. In typical computer systems, however, the user receives no feedback from the computer during his or her data entry regarding whether his or her input is valid or acceptable to the computer.
Additional problems with user-friendliness result from the amount of data (e.g., characters or words) that a user has to provide in order to input a command or request to the computer. Requiring a user to repeatedly enter long character or word strings for a command detracts from the user-friendliness of the computer system.
One solution to these problems is to maintain a history of previous command or data entries by the user. These can be compared, character by character, against new entries by the user, and a matching entry or entries displayed to the user. This solution, however, merely provides the user with an indication of what he or she has done before—there is no indication to the user of what possible entries are available.
Another solution to these problems is to identify all of the data entry possibilities to the user. However, given the large number of possibilities that can exist, this solution can quickly overwhelm the user and is only exacerbated as new entry possibilities are created.
The invention described below addresses these disadvantages, providing grammar-based automatic data completion and suggestion for user input.